//
//  ACAutoPersist.h
//  ACFramework
//
//  Created by caoyq on 2018/7/18.
//

#import <Foundation/Foundation.h>

/**
 自动本地持久化管理.
 
 - 不同于ACCache，主要是自定义路径以及文件名，可以存放不同账号、不同数据.
 
 - 内部是以一个字典来保存，然后归档到对应路径或从对应路径解档.
 
 - 存储的自定义对象也需要实现NSCoping协议.
 */
@interface ACAutoPersist : NSObject

/**
 根据自定义文件夹路径以及文件名进行初始化.
 
 - 对于文件夹路径不存在的，会自动创建该文件夹

 @param path 自定义的文件夹路径
 @param fileName 文件夹下存放数据的文件名
 @return 实例
 */
- (instancetype)initWithPersistPath: (NSString *)path fileName: (NSString *)fileName;

#pragma mark - 修改

/**
 设置键值

 @param anObject 值
 @param aKey 键名
 */
- (void)setObject: (id)anObject forKey:(nonnull id<NSCopying>)aKey;

/**
 根据key移除数据

 @param aKey 键名
 */
- (void)removeObjectForKey: (id)aKey;

/**
 根据key数组移除object数组

 @param keyArray 键名数组
 */
- (void)removeObjectsForKeys: (NSArray *)keyArray;

/**
 移除所有的数据
 */
- (void)removeAllObjects;

#pragma mark - 读取

/**
 存储的数据个数

 @return NSUInteger
 */
- (NSUInteger)count;

/**
 根据键获取值

 @param aKey 键名
 @return 值
 */
- (id)objectForKey:(id)aKey;

/**
 根据值获取键

 @param anObject 值
 @return 键的数组（一个值可能对用多个键，但是一个键肯定只是对应一个值）
 */
- (NSArray *)allKeysForObject:(id)anObject;

/**
 所有键

 @return NSArray<NSString *>
 */
- (NSArray*)allKeys;

/**
 所有值

 @return 值的数组
 */
- (NSArray*)allValues;

@end
